package com.csair.irp.job.file.parser.base;

import java.io.File;

/**
 * 管理文件来源
 */
public interface FileManager {

    /**
     * 上传本地文件到文件服务器
     * @param targetPath        目标文件目录或文件服务器路径
     * @param targetFileName    目标文件名或文件服务器文件名
     * @param srcFile           要上传的文件
     * @return                  上传结果    true:上传成功，false:上传失败
     */
    void upload(String targetPath, String targetFileName, File srcFile) throws Exception;

    /**
     * 从文件服务器下载文件
     * @param targetPath        目标文件目录或文件服务器路径
     * @param targetFileName    目标文件名或文件服务器文件名
     * @param localParent       下载到本地文件的目录
     * @return                  本地文件，文件名与targetFileName相同
     *                          文件不存在时返回null，否则返回下载后的文件
     */
    File download(String targetPath, String targetFileName, File localParent) throws Exception;
    /**
     * 从文件服务器下载文件
     * @param targetPath        目标文件目录或文件服务器路径
     * @param targetFileName    目标文件名或文件服务器文件名
     * @param localParent       下载到本地文件的目录
     * @param localFileName     本地文件名
     * @return                  文件不存在时返回null，否则返回下载后的文件
     */
    File download(String targetPath, String targetFileName, File localParent,String localFileName) throws Exception;


    /**
     * 从文件服务器批量下载文件
     * @param targetPath        目标文件目录或文件服务器路径
     * @param targetFileName    目标文件名或文件服务器文件名
     * @param localParent       下载到本地文件的目录
     * @return                  批量下载文件的结果，如果某个文件不存在则说明该文件下载失败
     */
//    File[] downloadList(String targetPath, String targetFileName, File localParent) throws Exception;

    /**
     * 列出目标文件目录或文件服务器路径下的所有文件名
     * @param targetPath        目标文件目录或文件服务器路径
     * @return                  目标文件目录或文件服务器路径下的所有文件名
     */
    String[] list(String targetPath) throws Exception;

    /**
     * 判断文件服务器或目标目录是否存在文件
     * @param targetPath        目标文件目录或文件服务器路径
     * @param targetFileName    目标文件名或文件服务器文件名
     * @return                  判断文件存在结果
     *                          单个文件    true:文件存在，false:文件不存在
     *                          多个文件    true:文件都存在，false:文件至少一个不存在，文件不存在要打印日志
     */
    boolean exists(String targetPath,String... targetFileName) throws Exception;


    /**
     * 删除文件服务器或目标目录的文件，支持批量删除
     * @param targetPath        目标文件目录或文件服务器路径
     * @param targetFileName    目标文件名或文件服务器文件名
     * @return                  删除文件的结果
     *                          单个文件    true:删除成功，false:删除失败
     *                          多个文件    true:全部删除成功，false:至少删除一个文件失败，删除失败的文件要打印日志
     */
    void delete(String targetPath, String... targetFileName) throws Exception;


}
